// 该程序向命名管道中写入一条消息，这条消息包括了客户机的进程ID和当前时间
// 该程序可以多份拷贝并发运行。由于对管道的写操作具有原子特性，因此，来自不同客户机的消息片段不会相互交错
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <errno.h>
#include <fcntl.h>
#include <time.h>
#include <sys/stat.h>
#include "restart.h"

int main(int argc, char *argv[]) {
    time_t curtime;
    char buf[1024];
    int len, requestfd;

    if (argc != 2) {
        fprintf(stderr, "Usage : %s fifoname > logname", argv[1]);
        return -1;
    }

    // 打开FIFO文件描述福
    requestfd = open(argv[1], O_WRONLY);
    if (requestfd == -1) {
        perror("Client failed to open FIFO");
        return -1;
    }

    // 获取当前时间，并将其写入buf字符串中
    sprintf(buf, "[Client ID] : %ld", (long)getpid());
    curtime = time(NULL);
    sprintf(buf+strlen(buf), " curtime : %s\n", ctime(&curtime));

    len = strlen(buf);

    if (r_write(requestfd, buf, strlen(buf)) != len) {
        perror("Client failed to write ...");
        return -1;
    }

    close(requestfd);

    return 0;
}